﻿Imports FairShop.Objects
Imports FairShop.Operaties

Public Class TeruggaveForm

#Region "Properties"

    Private _verkoopGoedAfgerekend As Boolean = False

    Private _teBetalen As Decimal
    Public Property TeBetalen() As Decimal
        Get
            Return _teBetalen
        End Get
        Set(ByVal value As Decimal)
            _teBetalen = value
            lblTeBetalen.Text = value.ToString("c")
            UpdateScherm()
        End Set
    End Property

    Private _betaald As Decimal = 0
    ''' <summary>
    ''' Gebruikt om achteraf op het ticket af te printen
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    Public Property Betaald() As Decimal
        Get
            Return _betaald
        End Get
        Set(ByVal value As Decimal)
            _betaald = value
            TeruggaveBedrag = value - TeBetalen
            UpdateScherm()
        End Set
    End Property

    Public WriteOnly Property TeruggaveBedrag() As Decimal
        Set(ByVal value As Decimal)
            If (value < 0) Then
                lblTeruggave.Text = "-"
            Else
                lblTeruggave.Text = value.ToString("c")
            End If
        End Set
    End Property

    Public ReadOnly Property IsTicketAfgedrukt() As Boolean
        Get
            Return Not btnOK.Text.StartsWith("OK")
        End Get
    End Property

#End Region

#Region "Constructors"

    Public Sub New(ByVal teBetalen As Decimal)
        InitializeComponent()
        Me.TeBetalen = teBetalen
        Me.Betaald = 0D
    End Sub

#End Region

#Region "Eigen events"

    Public Event KlantBetaalt(ByVal sender As Object, ByVal e As KlantBetaaltEventArgs)

#End Region

#Region "Events"

    Private Sub tbBetaald_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles tbBetaald.TextChanged
        Decimal.TryParse(tbBetaald.Text, Betaald)
        btnBancontact.Enabled = (Betaald = 0D)
        btnMaaltijdcheque.Enabled = (Betaald = 0D)
    End Sub

    Protected Overrides Sub OnKeyUp(ByVal e As KeyEventArgs)
        MyBase.OnKeyUp(e)
        Select Case e.KeyCode
            Case Keys.F2, Keys.F12, Keys.Enter
                If (btnOK.Enabled) Then
                    btnOK_Click(Me, EventArgs.Empty)
                Else
                    Sound.PlayWarning()
                End If
            Case Keys.F4
                btnGepast_Click(Me, EventArgs.Empty)
            Case Keys.F5
                btnBancontact_Click(Me, EventArgs.Empty)
            Case Keys.F6
                btnMaaltijdcheque_Click(Me, EventArgs.Empty)
        End Select
    End Sub

    Private Sub btnOK_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnOK.Click
        If (Betaald > 10000) Then
            MsgBox.ShowError("Vermoedelijk is het betaald bedrag niet juist. " & _
                             "Indien je een geschenkencheque inscande, denk er dan aan dat een cheque een ARTIKEL is en geen BETALING. " & _
                             "Annuleer dan dit scherm en scan de cheque opnieuw in met een minteken.")
            Return
        End If
        If Not IsTicketAfgedrukt Then
            ' de gebruiker klikt OK
            VerwerkBetaling(False, False)
        Else
            ' Sluiten-knop geklikt
            If (TextBoxEmail.Text.Length > 0) Then
                Dim result As EmailadressenBL.ResultType = EmailadressenBL.EmailadresToevoegen(TextBoxEmail.Text)
                ' iets met result doen, tonen aan gebruiker in tooltip?
            End If
            If (_verkoopGoedAfgerekend) Then
                ' de verkoop is goed afgerekend
                Me.DialogResult = DialogResult.OK
            Else
                ' er ging iets mis bij het OK-klikken
                ' zorg ervoor dat het aanroepend scherm dit weet door het resultaat te bekijken
                Me.DialogResult = DialogResult.Abort
            End If
            Me.Close()
        End If
    End Sub

    Private Sub btnGepast_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGepast.Click
        tbBetaald.Text = TeBetalen.ToString("N2")
    End Sub

    Private Sub btnBancontact_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnBancontact.Click
        If (MessageBox.Show("Is de transactie geslaagd?", "Betalen met bancontact", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes) Then
            tbBetaald.Text = TeBetalen.ToString("N2")
            VerwerkBetaling(True, False)
        End If
    End Sub

    Private Sub btnMaaltijdcheque_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMaaltijdcheque.Click
        If (MessageBox.Show("Is de transactie geslaagd?", "Betalen met maaltijdcheque", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes) Then
            tbBetaald.Text = TeBetalen.ToString("N2")
            VerwerkBetaling(False, True)
        End If
    End Sub

    Private Sub TextBoxEmail_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles TextBoxEmail.TextChanged
        If EmailadressenBL.IsEmailadresGeldig(TextBoxEmail.Text) Then
            TextBoxEmail.BackColor = Constants.Kleuren.GELDIG
        Else
            TextBoxEmail.BackColor = Constants.Kleuren.NEUTRAAL
        End If
    End Sub

#End Region

#Region "Helperfuncties"

    Private Sub UpdateScherm()
        If (Betaald >= TeBetalen) Then
            tbBetaald.BackColor = Constants.Kleuren.GELDIG
            btnOK.Enabled = True
        Else
            tbBetaald.BackColor = Constants.Kleuren.ONGELDIG
            btnOK.Enabled = False
        End If
    End Sub

    Private Sub VerwerkBetaling(ByVal isBancontact As Boolean, ByVal isMaaltijdcheque As Boolean)
        ' de gebruiker klikt OK
        Cursor = Cursors.WaitCursor
        Try
            Dim e As New KlantBetaaltEventArgs() With { _
                .BetaaldBedrag = Betaald, _
                .IsBancontact = isBancontact, _
                .IsMaaltijdcheque = isMaaltijdcheque, _
                .DontPrintTicket = Not cbTicketOk.Checked _
            }
            RaiseEvent KlantBetaalt(Me, e)
            _verkoopGoedAfgerekend = True
        Catch ex As Exception
            MsgBox.ShowError("Fout tijdens het bewaren")
            log.WriteError("VerkoopDetailsForm.RekenAfMetKasblad" & Environment.NewLine & ex.ToString())
            _verkoopGoedAfgerekend = False
        End Try
        ' vervang de OK-knop door een "Sluiten"-knop
        ' verberg de Annuleren-knop
        ' bij de volgende klik wordt het scherm dan gesloten
        btnOK.Text = "Sluiten (F12)"
        lblTeBetalen.Enabled = False
        tbBetaald.Enabled = False
        lblEuro.Enabled = False
        btnCancel.Visible = False
        btnGepast.Visible = False
        btnBancontact.Visible = False
        btnMaaltijdcheque.Visible = False
        lblTicketOk.Visible = False
        cbTicketOk.Visible = False
        Cursor = Cursors.Default
    End Sub

#End Region

End Class